package edu.tfh.s2.ehkbot.daten.real;

import edu.tfh.s2.ehkbot.daten.InitFactory;
import edu.tfh.s2.ehkbot.daten.PrototypFactory;
import edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState;
import edu.tfh.s2.ehkbot.daten.Zeitgeber.ZeitgeberState;
import edu.tfh.s2.ehkbot.gerete.aktoren.BiStateAktor;
import edu.tfh.s2.ehkbot.gerete.aktoren.MotorAktor;
import edu.tfh.s2.ehkbot.gerete.aktoren.real.BiStateAktorReal;
import edu.tfh.s2.ehkbot.gerete.aktoren.real.MotorAktorAktiviertStateReal;
import edu.tfh.s2.ehkbot.gerete.aktoren.real.MotorAktorDeaktiviertStateReal;
import edu.tfh.s2.ehkbot.gerete.sensoren.BarcodeScanner;
import edu.tfh.s2.ehkbot.gerete.sensoren.Kamera;
import edu.tfh.s2.ehkbot.gerete.sensoren.Sensor;
import edu.tfh.s2.ehkbot.gerete.sensoren.IndoorGPS.IndoorGPSState;
import edu.tfh.s2.ehkbot.gerete.sensoren.real.IndoorGPSReal;
import edu.tfh.s2.ehkbot.gerete.sensoren.real.SensorStateReal;
import edu.tfh.s2.ehkbot.inventar.Warenbestand;
import edu.tfh.s2.ehkbot.inventar.WarenboxRegal;
import edu.tfh.s2.ehkbot.steuerung.BusAdresse;
import edu.tfh.s2.ehkbot.steuerung.Karte;
import edu.tfh.s2.ehkbot.steuerung.schnittstellen.Netzwerk.NetzwerkState;

/**
 * State für die InitFactory welches für den Zustands Real zuständig ist.
 * 
 * @author s2zehn
 */
public class InitFactoryReal implements InitFactoryState {
	private PrototypFactory prototypFactory;

	/**
	 * Konstruktor der die Hilfs Prototypen Factory entgegen nimmt.
	 * @param prototypFactory
	 */
	public InitFactoryReal(PrototypFactory prototypFactory) {
		super();
		this.prototypFactory = prototypFactory;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getBarcodeScanner()
	 */
	@Override
	public BarcodeScanner getBarcodeScanner() {
		return prototypFactory.getBarcodeScanner();
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getBiStateAktor(edu.tfh.s2.ehkbot.steuerung.BusAdresse)
	 */
	@Override
	public BiStateAktor getBiStateAktor(BusAdresse busAdresse) {
		return new BiStateAktor(busAdresse, new BiStateAktorReal());
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getIndoorGPS()
	 */
	@Override
	public IndoorGPSState getIndoorGPS() {
		return new IndoorGPSReal();
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getKamera()
	 */
	@Override
	public Kamera getKamera() {
		return prototypFactory.getKamera();
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getKarte()
	 */
	@Override
	public Karte getKarte() {
		// TODO: real
		return null;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getMotorAktor(edu.tfh.s2.ehkbot.steuerung.BusAdresse)
	 */
	@Override
	public MotorAktor getMotorAktor(BusAdresse busAdd) {
		return new MotorAktor(
			busAdd,
			new MotorAktorAktiviertStateReal(),
			new MotorAktorDeaktiviertStateReal());
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getNetzwerk()
	 */
	@Override
	public NetzwerkState getNetzwerk() {
		return prototypFactory.getNetzwerk();
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getSensor(edu.tfh.s2.ehkbot.steuerung.BusAdresse)
	 */
	@Override
	public Sensor getSensor(BusAdresse busAdresse) {
		return new Sensor(busAdresse, new SensorStateReal());
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getWarenbestand()
	 */
	@Override
	public Warenbestand getWarenbestand() {
		// TODO: real
		return null;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getWarenboxregal()
	 */
	@Override
	public WarenboxRegal getWarenboxregal() {
		// TODO: real
		return null;
	}

	/**
	 * @see edu.tfh.s2.ehkbot.daten.InitFactory.InitFactoryState#getZeitgeber()
	 */
	@Override
	public ZeitgeberState getZeitgeber() {
		return prototypFactory.getZeitgeber();
	}
}
